package Management;

import java.util.ArrayList;
import java.util.List;

import Entities.Producto;
import Entities.ServicioAdicional;
import bean.dao.ProductoDAO;
import paquetes.enums.TipoFragilidad;
import paquetes.enums.TipoPeligrosidad;
import paquetes.negocioVO.ProductoVO;

public class ManagementProducto {

	
private static ManagementProducto instancia;
	
	public static ManagementProducto getInstancia(){
		if(instancia == null)
			instancia = new ManagementProducto ();
		return instancia;
	}
	
	public ProductoVO ProductoEntitieAVO(Producto producto) {
		ProductoVO productoVO = new ProductoVO();
		
		productoVO.setId(producto.getId());
		productoVO.setApilable(producto.getApilable());
		productoVO.setDescripcion(producto.getDescripcion());
		productoVO.setDimensionX(producto.getDimensionX());
		productoVO.setDimensionY(producto.getDimensionY());
		productoVO.setDimensionZ(producto.getDimensionZ());
		productoVO.setRequiereRefrigeracion(producto.requiereRefrigeracion());
		productoVO.setFragilidad(producto.getFragilidad());
		productoVO.setPeligrosidad(producto.getPeligrosidad());
		return productoVO;
	}
	
	public Producto VOAEntitie(ProductoVO producto){
		Producto pro = new Producto();
		pro.setApilable(producto.getApilable());
		pro.setDescripcion(producto.getDescripcion());
		pro.setDimensionX(producto.getDimensionX());
		pro.setDimensionY(producto.getDimensionY());
		pro.setDimensionZ(producto.getDimensionZ());
		pro.setRequiereRefrigeracion(producto.requiereRefrigeracion());
		pro.setFragilidad(producto.getFragilidad());
		pro.setPeligrosidad(producto.getPeligrosidad());
		return pro;
	}

	
	
	public void bajaProducto(int id) {
		ProductoDAO miProductoDAO = new ProductoDAO();
		miProductoDAO.bajaProducto(id);
	}

	public List<ProductoVO> obtenerProductos() {
		try {
			ProductoDAO miProducto = new ProductoDAO();
			List<Producto> productos = miProducto.obtenerProductos();
			List<ProductoVO> productosVO = new ArrayList<ProductoVO>();
			for (int i=0;i < productos.size();i++)
			{
				ProductoVO pro = this.ProductoEntitieAVO(productos.get(i));
				productosVO.add(pro);
			}
			return productosVO;
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public ProductoVO obtenerProducto(int idPro) {
		try {
			ProductoDAO miProducto = new ProductoDAO();
			Producto p = miProducto.getProducto(idPro);
			if (p==null)
				return null;
			ProductoVO pro = this.ProductoEntitieAVO(p);
			return pro;
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
		
	}
	

	public void editarProducto(String descripcion, int dimensionX,
			int dimensionY, int dimensionZ, int fragilidad,
			int peligrosidad, int refrigeracion, int apilable) {
		
		ProductoDAO miProductoDAO = new ProductoDAO();
		Producto pro = new Producto();
		
		pro.setApilable(apilable);
		pro.setDescripcion(descripcion);
		pro.setDimensionX(dimensionX);
		pro.setDimensionZ(dimensionZ);
		//pro.setFragilidad(TipoFragilidad.valueOf(fragilidad));
		//pro.setPeligrosidad(TipoPeligrosidad.valueOf(peligrosidad));
		if(refrigeracion ==1){
			pro.setRequiereRefrigeracion(true);
			}else{
			pro.setRequiereRefrigeracion(false);		
			}
			
		pro.setApilable(apilable);
		miProductoDAO.actualizarProducto(pro);
		
	}

	public void AltaDeProducto(String descripcion, int dimensionX,
			int dimensionY, int dimensionZ, String fragilidad,
			String peligrosidad, int refrigeracion, int apilable) {
		
		ProductoDAO miProductoDAO = new ProductoDAO();
		
		System.out.println(fragilidad);
		System.out.println(peligrosidad);
		
		Producto pro = new Producto();
		
		pro.setApilable(apilable);
		pro.setDescripcion(descripcion);
		pro.setDimensionX(dimensionX);
		pro.setDimensionZ(dimensionZ);
		pro.setFragilidad(TipoFragilidad.valueOf(fragilidad));
		pro.setPeligrosidad(TipoPeligrosidad.valueOf(peligrosidad));
		if(refrigeracion ==1){
		pro.setRequiereRefrigeracion(true);
		}else{
		pro.setRequiereRefrigeracion(false);		
		}
		pro.setApilable(apilable);
		miProductoDAO.altaProducto(pro);
		
	}
		
	}




